//
//  ViewController.m
//  NSSet
//
//  Created by apple on 15/8/21.
//  Copyright (c) 2015年 戴维营. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
// 集合里的对象之间没有明显的先后顺序，NSSet不允许包含相同的元素，如果将两个相同的元素放入同一个NSSet中，只会保留其中的一个［NSSet按照hash算法来存储集合中的元素，因此具有很好的查找和存取性能］
 
// 集合不保证元素的添加顺序，顺序可能发生变化，与NSArray相比，NSSet最大的区别是没有索引，因此不能根据索引来操作元素，集合和数组之间有很多的相似的地方，比如都可以：用count来获取元素的个数，都可通过快速枚举来遍历元素等等［其他更多的相似地方可以自行归纳总结］；
    
    
//   集合创建的方法 －－－－－－－－－－－－－ －－－－－－－－－－－－－ －－－－－－－－－－－－－
    //1、实例方法创建
#if 0
    NSSet *set = [[NSSet alloc] initWithObjects:@"1",@"2",@"1",@"hello", nil];
    NSLog(@"%@",set);
    
    //输出顺序随机，且去重；
    
    //用类方法创建
    
    NSSet *set1 = [NSSet setWithObject:@"1"];
    NSSet *set2 = [NSSet setWithObjects:@"1",@"2",@"2",@3,@"hello", nil];
    NSLog(@"%@,%@",set1,set2);
#endif
    // －－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－

    
    //NSSet的基本用法
#if 0
    //在set的基础上增加一个新元素，然后返回新的集合对象

    NSSet *set = [NSSet setWithObjects:@"1",@"1",@"2",@2,nil];
    NSSet *set1 = [set setByAddingObject:@"pop"];
    NSLog(@"set1--> %@",set1);
   
    ////在set的基础上增加一个新元素，然后返回新的集合对象
    //－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－
    NSSet *set2 = [set setByAddingObjectsFromSet:set1];
    NSLog(@"set2---> %@",set2);
    //－－－－－－－－－－－－－－－－－－－－－－－－
    
    //返回集合中的所有元素；
    NSArray *allSet = [set2 allObjects];
    NSLog(@"allSet--> %@",allSet);
    //－－－－－－－－－－－－－－－－
    
    //1、返回集合中某个————元素，返回的这个元素值并不确定，但也不保证是随机选中；
    //2、这就意味着可能每一次运行的结果都会产生不同的值［除非集合中只有一个元素］；
    id obj = [set2 anyObject];
    NSLog(@"obj--> %@",obj);
    
    //判断集合中是否包含指定元素；
    BOOL haveIt = [set2 containsObject:@"1"];
    if (haveIt)
    {
        NSLog(@"包含");
    }
    else
    {
        NSLog(@"不包含");
    }
#endif
    
#if 0
    //若set中包含有参数相等的元素，则将该元素返回，然后产生一个新的集合对象；
    
    NSSet *set = [NSSet setWithObjects:@"1",@"2",@"1",@"3", nil];
    id obj2 = [set member:@"1"];
    NSLog(@"obj2--> %@",obj2);//obj2的类型为nsstring；
    //判断set1是否为set的子集；
    NSSet *set1 = [NSSet setWithObject:@"1"];
    BOOL isSubSet =[set1 isSubsetOfSet:set];
    if (isSubSet)
    {
        NSLog(@"是");
    }
    else
    {
        NSLog(@"否");
    }
    
    //判断两个集合是否有交集
    BOOL isIntersects = [set1 intersectsSet:set];
    if (isIntersects)
    {
        NSLog(@"是");
    }
    else
    {
        NSLog(@"否");
    }
    
    //判断两个集合元素是否相等；
    BOOL isEqual = [set isEqual:set1];
    if (isEqual)
    {
        NSLog(@"相等");
    }
    else
    {
        NSLog(@"不相等");
    }
#endif
    
#if 0
    
    //1、NSSet中不能添加两个相同的对象，简单的说，NSSet判断两个元素相等的标准是两个对象通过isEqual方法返回YES;
    //2、同时hash方法返回值也相等；
    //3、NSSet中不能添加两个相同的对象，但事情没我们想象的那么简单；
    NSArray *array = @[@1,@2,@3];
    NSMutableArray *array1 = [NSMutableArray arrayWithObjects:@1,@2,@3, nil];
    
    NSSet *set = [NSSet setWithObjects:array,array1,nil];
    NSLog(@"set--> %@",set);
#endif
    
#if 0
    //－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－
    NSArray *array = @[@1,@2];
    NSMutableArray *array1 = [NSMutableArray arrayWithObjects:@1,nil];
    NSSet *set = [NSSet setWithObjects:array1,array, nil];
    
    [array1 addObject:@2];
    NSLog(@"set--> %@",set);
    //－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－
#endif
    
    //NSMutableSet的功能与用法；
#if 0//-------------------------------
    //创建一个空的可变集合；
    NSMutableSet *mutaSet = [NSMutableSet set];
    
    //往空的可变集合里面添加元素；
    [mutaSet addObject:@"1"];
    [mutaSet addObject:@1];
    NSLog(@"mutaSet--> %@",mutaSet);//这里面的（1，1）我们怎么判断他们的类型；
    
    //删除集合中的某个元素
    [mutaSet removeObject:@"1"];
    NSLog(@"mutaSet--> %@",mutaSet);
    
    //删除集合中的所有元素；
    [mutaSet removeAllObjects];
    NSLog(@"mutaSet--> %@",mutaSet);
#endif
    
#if 1
    //集合间的运算
    NSMutableSet *mutaSet = [NSMutableSet set];
    NSMutableSet *mutaSet1 = [NSMutableSet set];
    NSMutableSet *mutaSet2 = [NSMutableSet set];
    
    [mutaSet addObject:@"1"];
    [mutaSet1 addObject:@"2"];
    [mutaSet2 addObject:@"3"];//元素的添加这里只能添加一个？
    [mutaSet2 addObjectsFromArray:@[]];
    
    //运算
    [mutaSet unionSet:mutaSet1];//两个集合间的并集；
    [mutaSet1 minusSet:mutaSet2]; //两个集合间的差集；
    [mutaSet intersectsSet:mutaSet2];//两个集合间的交集；
    
    //------------------------------------------------------------
    [mutaSet setSet:mutaSet2];//用后面的这个集合中的元素替换掉集合中以有对元素；
    //------------------------------------------------------------
#endif
    // Do any additional setup after loading the view, typically from a nib.
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end
